#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <memory>
#include <cstring>

using namespace std;

class CCartesianTree {

private:
	
    struct CVertex {
        //Ключ кучи
        int Key;
		//Элемент
		int Elem;
        //Сумма в поддереве элемента, включая его самого
        int Sum;
        //Количество элементов в поддереве
        int SubtreeSize;
		auto_ptr<CVertex> LeftChild;
        auto_ptr<CVertex> RightChild;

		CVertex(int _Elem){
			Key = rand();
			Elem = Sum = _Elem;
			SubtreeSize = 1;
		}
		
    };
	
	auto_ptr<CVertex> root;
	
	int get_sum(auto_ptr<CVertex> &ptr){
		if(!ptr.get()){
			return 0;
		}
		return ptr.get()->Sum;
	}
	
	int get_size(auto_ptr<CVertex> &ptr){
		if(!ptr.get()){
			return 0;
		}
		return ptr.get()->SubtreeSize;
	}
	
	void calc(auto_ptr<CVertex> &ptr){
		ptr.get()->Sum = ptr.get()->Elem + get_sum(ptr.get()->LeftChild) + get_sum(ptr.get()->RightChild);
		ptr.get()->SubtreeSize = 1 + get_size(ptr.get()->LeftChild) + get_size(ptr.get()->RightChild);
	}
	
	void split(auto_ptr<CVertex> v, int size, auto_ptr<CVertex> &l, auto_ptr<CVertex> &r){
		if(!v.get()){
			l = r = auto_ptr<CVertex>(NULL);
			return;
		}
		if(get_size(v.get()->LeftChild) + 1 <= size){
			split(v.get()->RightChild, size - get_size(v.get()->LeftChild) - 1, v.get()->RightChild, r);
			l = auto_ptr<CVertex>(v.release());
			calc(l);
		}
		else{
			split(v.get()->LeftChild, size, l, v.get()->LeftChild);
			r = auto_ptr<CVertex>(v.release());
			calc(r);
		}
	}
	
	auto_ptr<CVertex> merge(auto_ptr<CVertex> &l, auto_ptr<CVertex> &r){
		if(!get_size(l)){
			return auto_ptr<CVertex>(r.release());
		}
		if(!get_size(r)){
			return auto_ptr<CVertex>(l.release());
		}
		auto_ptr<CVertex> res;
		if(l.get()->Key > r.get()->Key){
			l.get()->RightChild = merge(l.get()->RightChild, r);
			res = auto_ptr<CVertex>(l.release());
		}
		else{
			r.get()->LeftChild = merge(l, r.get()->LeftChild);
			res = auto_ptr<CVertex>(r.release());
		}
		calc(res);
		return res;
	}
	
public:

    //Добавить в конец элемент
    void Add( int value ){
		auto_ptr<CVertex> new_vertex(new CVertex(value));
		root = merge(root, new_vertex);
	}
    //Вставить элемент value в позицию position, позиции нумеруем с 0
    void Insert( int value, int position ){
		auto_ptr<CVertex> l, r;
		split(root, position, l, r);
		auto_ptr<CVertex> m(new CVertex(value));
		root = merge(l, m);
		root = merge(root, r);
	}
    //Удалить элемент в позиции position
    void Delete( int position ){
		auto_ptr<CVertex> p1, p2, p3;
		split(root, position, p1, p2);
		split(p2, 1, p2, p3);
		root = merge(p1, p3);
	}
    //Посчитать сумму с позиции [from; to)
    int Sum( int from, int to ){
		auto_ptr<CVertex> p1, p2, p3;
		split(root, to, p1, p3);
		split(p1, from, p1, p2);
		int res = get_sum(p2);
		root = merge(p1, p2);
		root = merge(root, p3);
		return res;
	}


};

int main(){
	int n;
	cin >> n;
	CCartesianTree T;
	for(int i = 0; i < n; i++){
		string cmd;
		cin >> cmd;
		if(cmd == "add"){
			int value;
			cin >> value;
			T.Add(value);
			continue;
		}
		if(cmd == "insert"){
			int value, position;
			cin >> value >> position;
			T.Insert(value, position);
			continue;
		}
		if(cmd == "delete"){
			int position;
			cin >> position;
			T.Delete(position);
			continue;
		}
		if(cmd == "sum"){
			int from, to;
			cin >> from >> to;
			cout << T.Sum(from, to) << endl;
			continue;
		}
		fprintf(stderr, "incorrect command\n");
		return 0;
	}
	return 0;
}
